﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ComponentModel;

namespace SlvPartecipazione
{
    public delegate void RispostaDelegate();

    public partial class Risposta : UserControl, INotifyPropertyChanged
    {
        #region Proprietà
        public static event RispostaDelegate RispostaCorrettaEvent;
        public static event RispostaDelegate RispostaSbagliataEvent;

        private static Boolean isVisible = false;
        private static statoAiuto currentStatoAiuto;
        private enum statoAiuto { Nessuno, Autore, Suggerimento };

        private string fromY;
        public string FromY
        {
            get { return fromY; }
            set
            {
                fromY = value; OnPropertyChanged("FromY");
            }
        }

        private string toY;
        public string ToY
        {
            get { return toY; }
            set
            {
                toY = value; OnPropertyChanged("ToY");
            }
        }

        private string titolo;
        public String Titolo
        {
            get { return titolo; }
            set
            {
                titolo = value; OnPropertyChanged("Titolo");
            }
        }

        private string autore;
        public String Autore
        {
            get { return autore; }
            set
            {
                autore = value; OnPropertyChanged("Autore");
            }
        }

        private string suggerimento;
        public String Suggerimento
        {
            get { return suggerimento; }
            set
            {
                suggerimento = value; OnPropertyChanged("Suggerimento");
            }
        }
        #endregion

        public Risposta()
        {
            InitializeComponent();

            btnConferma.MouseLeftButtonUp += new MouseButtonEventHandler(btnConferma_MouseLeftButtonUp);
            btnHelp.MouseLeftButtonUp += new MouseButtonEventHandler(btnHelp_MouseLeftButtonUp);

            txtRisposta.KeyUp += new KeyEventHandler(txtRisposta_KeyUp);

            this.FromY = "0";
            this.ToY = "0";
            currentStatoAiuto = statoAiuto.Nessuno;

            sbHideAutore.Begin();
            sbHideSuggerimento.Begin();
        }

        void btnHelp_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            Invoker i = new Invoker();

            switch (currentStatoAiuto)
            {
                case statoAiuto.Nessuno:
                    currentStatoAiuto = statoAiuto.Autore;
                    sbShowAutore.Begin();
                    
                    i.IncrementaAiuto();
                    break;
                case statoAiuto.Autore:
                    currentStatoAiuto = statoAiuto.Suggerimento;
                    sbShowSuggerimento.Begin();

                    i.IncrementaAiuto();
                    break;
            }
        }

        void txtRisposta_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                controllaEsattezza();
            }
        }

        void btnConferma_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            controllaEsattezza();
        }

        private void resetAiuti()
        {
            currentStatoAiuto = statoAiuto.Nessuno;
            sbHideAutore.Begin();
            sbHideSuggerimento.Begin();
        }

        private void controllaEsattezza()
        {

            if (txtRisposta.Text.Trim() != string.Empty)
            {
                if(txtRisposta.Text.Equals(this.Titolo, StringComparison.InvariantCultureIgnoreCase))
                {
                    RispostaCorrettaEvent.Invoke();
                }
                else
                {
                    RispostaSbagliataEvent.Invoke();
                }

                Nascondi();
            }
        }

        public void Mostra()
        {
            if (!isVisible)
            {
                sbShowForm.Begin();
                isVisible = true;
            }
        }

        public void Show(Brano b)
        {
            this.Visibility = System.Windows.Visibility.Visible;
            this.Titolo = b.Titolo;
            this.Autore = "Autore : " + Environment.NewLine + b.Autore;
            this.Suggerimento = "Aiuto sul titolo : " + Environment.NewLine + b.Suggerimento;
            this.ToY = 40 + (70 * (7 - b.indice - 1)) + "";
            this.FromY = (70 * (7 - b.indice - 1)) - 150 + "";
            
#if DEBUG 
            this.txtRisposta.Text = b.Titolo;
#else
            this.txtRisposta.Text = string.Empty;
#endif       
            this.txtRisposta.Focus();

            resetAiuti();
            Mostra();

        }

        public void Nascondi()
        {
            if (isVisible)
            {
                sbHideForm.Begin();
                isVisible = false;
            }
        }

        #region Eventi

        #endregion

        #region INotifyPropertyChanged

        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }

        #endregion
    }
}
